perm filename TALK[4,KMC]4 blob sn#043946 filedate 1973-05-22 generic text, type T, neo UTF8
00100	% TO RECONSTRUCT THE TALK CORE IMAGE:
00200	
00300		.R MLISPC					TALK → TALK.LAP
00400		*(MLISP TALK T)
00500		*↑C
00600	
00700		.R LISP 16					TALK.LAP → TALK.DMP
00800		ALLOC? Y
00900		FULL WDS=2000_					_ MEANS <SPACE>
01000		BIN.PROG.SP=3200_
01100		SPEC.PDL=_
01200		REG. PDL=_
01300		HASH=_
01400		*(DSKIN (TALK.LAP) (S,DAV) (MAIL.FNS) SYS: UTILS)
01500		*(MAIL_INIT)
01600		*(INITFN (QUOTE RESTART))
01700		*↑C
01800		.SAVE TALK00
01900	
02000	TO RUN THE PROGRAM, TYPE
02100		.RUN TALK00[4,KMC]
02200	%
02300	
02400	
02500	BEGIN  NEW EOF, FILE1, FILE2;   SPECIAL EOF, FILE1, FILE2;
02600	
02700	
02800	FEXPR OUT (L);						% L = (DESTINATION  FUNCTION  OPEN  CLOSE) %
02900		IF L[1] EQ 'DOC THEN SEND_MAIL('DOCJOB, L[2])
03000		ELSE IF L[1] EQ 'OWN THEN EVAL L[2]
03100		ELSE	BEGIN
03200			IF LENGTH L ≥ 3 & L[3] THEN EVAL <'OUTPUT, 'DSK:, EVAL L[1]>;
03300			OUTC(T, NIL);
03400			EVAL L[2];
03500			OUTC(NIL, IF LENGTH L = 4 THEN L[4] ELSE NIL);
03600			END;
03700	
03800	
03900	FEXPR INP (L);						% L = (SOURCE  FUNCTION) %
04000		IF L[1] EQ 'DOC THEN SEND_MAIL('DOCJOB, <'SEND_MAIL, '(QUOTE TALK00), L[2]>)
04100			ALSO WAIT_FOR_MAIL(NIL)
04200		ELSE EVAL L[2];
04300	
04400	
04500	EXPR READ_MESSAGE ();
04600		BEGIN  NEW CH, L;
04700		PRINTSTR "READY:";
04800		DO NIL UNTIL (CH ← READCH()) NEQ CR & CH NEQ LF & CH NEQ ALTMODE;
04900		TERPRI TERPRI DO L ← CH CONS L UNTIL (CH ← READCH()) EQ ALTMODE & (CH ← READCH()) EQ ALTMODE;
05000		RETURN READLIST('?" CONS REVERSE('?" CONS L));
05100		END;
05200	
05300	
05400	EXPR PRINT_MESSAGE (MESSAGE);
05500		TERPRI TERPRI FOR NEW CH IN MESSAGE DO PRINC CH;
05600	
05700	
05800	EXPR PRINT_ALL (FILE);					% COPIES FILE "FILE" TO CURRENT OUTPUT FILE %
05900		BEGIN  NEW CH;
06000		EVAL <'INC, <'INPUT, FILE, 'DSK:, FILE>, NIL>;
06100		DO NIL UNTIL TYO(TYI()) EQ OCTAL 45 & (ATOM(CH ← ERRSET(READCH(),T))  |  PRINC(CAR CH) & NIL);
06200		INC(NIL,T)
06300		END;
06400	
06500	
06600	EXPR SLASHIFY (L);
06700		FOR NEW I IN L COLLECT <'?/, I>;
     

00100	%##########################################################################################%
00200	%########################          EXECUTION BEGINS HERE          #########################%
00300	%##########################################################################################%
00400	
00500	
00600	EOF ← PERCENT;						% THE END-OF-FILE CHARACTER %
00700	
00800	PRINTSTR TERPRI "WHAT DISK FILE DO YOU WANT THIS INTERVIEW SAVED ON?  (5 LETTERS ONLY)";
00900	FILE1 ← TERPRI READ();
01000	FILE2 ← AT(SUBSTR(FILE1,1,5) CAT "A");			% OUTPUT ALTERNATES BETWEEN THESE TWO %
01100	OUT(FILE1, NIL, T);					% INITIALIZATION %
01200	
01300	
01400	WHILE T DO
01500		BEGIN  NEW MESSAGE, VALUES;   SPECIAL MESSAGE, VALUES;
01600		IF ¬JOB_EXISTS('DOCJOB) THEN
01700			BEGIN
01800			PRINTSTR "THE DOCTOR HAS NOT STARTED RUNNING 'DOCJOB' YET.";
01900			DO SLEEP(30) UNTIL JOB_EXISTS('DOCJOB) | PROG2(PRINTSTR "STILL HASN'T STARTED 'DOCJOB'", NIL);
02000			TERPRI PRINTSTR "OK, HE JUST STARTED IT.";
02100			SLEEP(30);				% MAKE SURE HE HAS TIME TO START IT UP %
02200			END;
02300		MESSAGE ← INP(DOC, READ_MESSAGE());
02400		OUT(OWN, TERPRI PRINTSTR MESSAGE);
02500		OUT(FILE1, TERPRI PRINTSTR TERPRI TERPRI MESSAGE);
02600		MESSAGE ← INP(OWN, READ_MESSAGE());
02700	        EVAL<'OUT, 'DOC, <'PRINTSTR, <'QUOTE,READLIST SLASHIFY(EXPLODE AT MESSAGE)>>>;
02800		OUT(FILE1, PRINTSTR MESSAGE);
02900		OUT(FILE1,  PRINC EOF, NIL, T);
03000		'(FILE1 FILE2) ←⊗ <FILE2, FILE1>;		% ROTATE THE OUTPUT FILES %
03100		OUT(FILE1, PRINT_ALL(FILE2), T);
03200		END;
03300	
03400	
03500	END.